Goroutines 是一個由 Go runtime 管理的輕量化線程,是 Go 用來實現 Concurrency (並發) 的方式
其中設計了 channels、sync 機制
今天就來簡單實作一下 Goroutines~
channels、sync 機制後面幾天再來介紹
go func function_名稱()
go func say()
下面就用 A Tour of Go 上的官方範例來做講解
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
我們可以先將 Line 10 的 time.Sleep(100 * time.Millisecond)
進行註解,看看會發生什麼事情
結果就是「world」字眼出現的機率大幅下降,變成幾乎不會出現
這是為什麼呢?是因為當 go say("world")
被執行時,系統會將其放到其他線程內 (main 自己本身也是一個 goroutine),然後繼續往下執行 say("hello")
,並沒有等待,然後 main 就執行結束了
我們這時候可以將 Line 10 取消註解,看一下會發生什麼事情~
結果就是「world」出現了~(每次執行結果都會不一樣)
這是爲什麼呢?是因為當執行到 say("hello")
時,遇到了 time.Sleep(100 * time.Millisecond)
,讓當前 CPU 有了空閒時間,就有時間去執行被放到其他線程內的 go say("world")
了
今天簡單介紹了 Go 的 Goroutines 用法
後面幾天會來介紹 channels、sync 等 Goroutines 機制
我們明天見~